package com.nbst.dao.mapper.mes;

import java.util.List;
import java.util.Map;

import com.nbst.dao.base.mapper.BaseMapper;
import com.nbst.model.mes.EndWork;
import com.nbst.model.wms.PendingInStockItem;
import com.nbst.model.wms.PendingInStockItemEntry;

public interface EndWorkMapper extends BaseMapper<EndWork> {

	int findByWorkerCount(String fWorker);

	/**
	 * 根据条件查询最后一道工序质检完成后还未入库的数据
	 * 
	 * @param map
	 * @return List<Map<String,Object>>
	 * @author King
	 * @date 2019年4月2日
	 */
	List<Map<String, Object>> getEndWorkInStock(Map<String, Object> map);

	/**
	 * 根据id撤销入库状态
	 * 
	 * @param id
	 * @return Integer
	 * @author King
	 * @date 2019年5月22日
	 */
	Integer revokeEndWorkInStock(Map<String, Object> map);

	/**
	 * 根据合并工序的末工序报工记录id查询本次合并报工的各种数量
	 * 
	 * @param id
	 * @return
	 */
	Map<String, Object> getSumQty(Integer id);

	/**
	 * 根据辅助完工表id查询合并工序的报工记录
	 * 
	 * @param fAuxEndWorkId
	 * @return List<EndWork>
	 * @author King
	 * @date 2019年6月18日
	 */
	List<EndWork> findByfAuxEndWorkId(Map<String, Object> map);

	/**
	 * 根据完工表id查询派工单号
	 * 
	 * @param id
	 * @return String
	 * @author King
	 * @date 2019年7月11日
	 */
	String getDisPatchCode(Integer id);

	/**
	 * 查找当前合并工序中的最后一道工序的完工表Id
	 * 
	 * @param fAuxEndWorkId
	 * @return
	 */
	Integer findMaxMergeOperId(Integer fAuxEndWorkId);

	/**
	 * 查找当前合并工序的所有工序的完工表Id集合
	 * 
	 * @param fAuxEndWorkId
	 * @return
	 */
	List<Integer> findMergeOperIds(Integer fAuxEndWorkId);

	List<Map<String, Object>> getEndWorkList(Map<String, Object> map);

	/**
	 * 获取审批列表
	 * 
	 * @param map
	 * @return
	 */
	List<Map<String, Object>> getApprovalList(Map<String, Object> map);

	/**
	 * 每个月25号凌晨更新数据库
	 * 
	 * @param map
	 * @param
	 * @return
	 */
	void updateByBatchPerMonth(Map<String, Object> map);

	/**
	 * 获取工废审批撤销表格
	 * 
	 * @param map
	 * @param
	 * @return
	 */
	List<Map<String, Object>> getRevokeList(Map<String, Object> map);

	/*
	 * 根据当前完工表ID获取当前合并工序对应的所有完工表Id（不包含当前完工表id）
	 */
	List<Integer> getMergeEndIds(Integer id);

	/**
	 * @param temp
	 * @param
	 * @return
	 */
	Integer getNotCheckNum(Integer[] temp);

	/**
	 * 根据条件查询待完工检信息
	 * 
	 * @param map
	 * @return List<EndWork>
	 * @author King
	 * @date 2019年8月9日
	 */
	List<EndWork> findByCondition1(Map<String, Object> map);

	/**
	 * 根据流转卡号查询报工数量工废、料废、次品、报工总数
	 * 
	 * @param fCardId
	 * @return Map
	 * @author King
	 * @date 2019年8月12日
	 */
	Map<String, Object> getEndWorkQty(Integer fCardId);

	/**
	 * 根据完工id查询完工记录(工废、料废 、次品数)
	 * 
	 * @param id
	 * @return
	 */
	List<Map<String, Object>> loadEndWorkById(Integer id);

	/**
	 * 根据完工单id获取该完工单是否已质检
	 * 
	 * @param map
	 * @return List<EndWork>
	 * @author King
	 * @date 2020年3月10日
	 */
	List<EndWork> getNotQcEndWork(Integer fEndWorkId);

	/**
	 * 根据完工单id获取与该完工单合并的完工单信息，如果没有则返回自己
	 * 
	 * @param id
	 *            完工单id
	 * @return List<Integer>
	 * @author King
	 * @date 2020年3月10日
	 */
	List<Integer> getEndWorkId(Integer id);

	/**
	 * 根据条件获取待入库列表
	 * 
	 * @param map
	 *            这里只提供fBillNo\fCode\fEndWorkId 与null的查询
	 * @return List<PendingInStockItem>
	 * @author King
	 * @date 2020年3月19日
	 */
	List<PendingInStockItem> getPendingInStockLists(Map<String, Object> map);

	/**
	 * 根据完工单id获取待入库的生产任务单入库明细
	 * 
	 * @param map
	 * @return List<PendingInStockItemEntry>
	 * @author King
	 * @date 2020年3月19日
	 */
	List<PendingInStockItemEntry> getPendingInStockEntryLists(Map<String, Object> map);

	/**
	 * 根据id获取完工单信息
	 * 
	 * @param id
	 * @return List<EndWork>
	 * @author King
	 * @date 2020年4月6日
	 */
	List<EndWork> findById(Integer id);

	/**
	 * 根据派工单号查询非试车报工的完工单id
	 * 
	 * @param fCode
	 * @return List<Integer>
	 * @author King
	 * @date 2020年4月13日
	 */
	List<Integer> getEndWorkByCode(String fCode);

	/**
	 * 根据派工单号查询试车报工未质检的完工记录
	 * 
	 * @param fCode
	 * @return List<Integer>
	 * @author King
	 * @date 2020年4月13日
	 */
	List<Integer> getNotQcEndWorkId(String fCode);

	/**
	 * 根据派工单id获取该派工单已完工数
	 * 
	 * @param fDisPatchId
	 *            派工单id
	 * @return Double
	 * @author King
	 * @date 2020年5月5日
	 */
	Double getDisPathEndWorkQty(Integer fDisPatchId);

	/**
	 * 更新完工单已质检时间
	 * 
	 * @return Integer
	 * @author King
	 * @date 2020年9月4日
	 */
	Integer updateEndWorkQcDate();

	/**
	 * 将完工单的尾工序标志改为是
	 * 
	 * @param fCardId
	 *            void
	 * @author King
	 * @date 2021年2月10日
	 */
	void updateLastOpFlag(Integer fCardId);
}